<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Promise</title>
</head>

<body>

    <!-- 
        异步操作 变成同步操作
            异步操作：定时器 异步事件

            事件执行没有完全等待上次的执行任务的完成；

            同步编程的异步操作 往往采用回调函数嵌套的方式；
            但是可能出现回调地狱问题，难于理解 沟通成本极高

        于是 Promise诞生了 可以将回调地狱扁平化

        Promise是一个构造函数 可以通过 new 操作符生成 promise对象； 

        Promise在实例化的时候 接收一个回调函数作为参数 即所有异步操作的开端；

        let p = new Promise(function (resolve,reject){
            ...一般一个回调函数 对应一个异步操作；
        })

            resolve 表示异步操作成功
            reject 表示异步操作失败

        p.then()  表示接下来要执行的异步操作
        .catch()  捕获异常信息

        传参的问题：
            resolve和reject 方法都可接收参数，并且把参数传入到下一次的then 和 catch 方法中

        promise.all 和 race:
            all：接收一个数组 里面放若干个promise对象 只有所有的promise对象都resolve
                 才会触发下一步then；
            race：接收一个数组 里面放若干个promise对象 最快 resolve 的对象触发下一步then操作；

     -->
    <script src="./index.js"></script>
</body>

</html>